package com.xnx3.j2ee.util;

import com.xnx3.j2ee.log.Log;
import com.xnx3.j2ee.log.vo.LogListVO;

import java.util.Map;

/**
 * @Description: wangmarket
 * @Author xiaoliangjun
 * @DateTime 4/1/24 3:00 PM
 */
public class LogUtil {

    /**
     * 获取log对象
     */
    public static Log getLog() {
        return new Log();
    }

    /**
     * 判断当前日志使用的是哪种方式
     * @param datasourceClass 哪种方式的实现类，如默认带的本地打印为 {@link } ，这里如果要判断是否是使用的控制台打印，可传入 ConsoleDataSource.class
     * @return 是否使用
     * 			<ul>
     * 				<li>true ： 是此种方式</li>
     * 				<li>false ： 不是此种方式</li>
     * 			</ul>
     */
    public static boolean isDataSource(Class datasourceClass){
        return getLog().isDataSource(datasourceClass);
    }


    /**
     * 判断当前日志使用的是哪种方式
     * @param
     * @return 是否使用
     * 			<ul>
     * 				<li>true ： 是此种模式</li>
     * 				<li>false ： 不是此种模式</li>
     * 			</ul>
     */
    public static boolean isDataSource(String datasourceClassName){
        return getLog().isDataSource(datasourceClassName);
    }


    /**
     * 添加一条日志。
     * <br/>（记录在缓存中，还未提交，达到多少条、或多少秒后自动提交，也或者执行 cacheCommit() 手动提交）
     * @param params 日志主体，传入要保存的键值对。
     */
    public static synchronized void add(Map<String, Object> params){
        if(params == null){
            return;
        }
        if(params.size() == 0){
            return;
        }

        getLog().add(params);
    }

    /**
     * 将缓存中的日志提交
     * @return true:成功
     */
    public static boolean commit(){
        return getLog().commit();
    }

    /**
     * 将日志查询出来，以列表+分页的数据输出
     * @param query 要查询的单词或者文字、又或者传入如： name:guanleiming AND age:123
     * @param everyPageNumber 每页显示多少条，也就是list返回多少条数据
     * @param currentPage 当前要获取第几页得数据
     * @return {@link }
     */
    public static LogListVO list(String query, int everyPageNumber, int currentPage){
        return getLog().list(query, everyPageNumber, currentPage);
    }

}
